As our codebase scales, the need for cleaner architecture becomes more apparent. The dependency inversion principle (DIP) is one tool that helps us build cleaner relationships among our software modules. In this post, DIP is presented using atomic modules and is later applied to frameworks.